/* 
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

var mode_saisie = false;
$(document).ready( function() {
	// Mettre au dernier jour
	$('.cours').each(function() {
		$(this).append('<span name="jour" style="display: none;">'+$(this).parents('.planning-jour').find('.planning-titre').attr('name')+'</span> ');
		var position = 136*(parseInt($(this).parents(".planning-jour").attr("name"))-5) + $(this).position().left;
		$(this).appendTo('.planning-jour[name=5] div[name=relative]');
		$(this).css('left', position);
	});
	// Cache le bouton submit du formulaire
	//$('form input.submit').hide();
	/*
    // Empêche la soumission du formulaire
    $('form').bind('submit', function(){return false;});

    // Affiche un calendrier à la place du champ texte date
    var div_date = $('<div></div>').datepicker({
	showWeek:true,
	showOtherMonths: true,
	selectOtherMonths: true
    });

    $('form input.date').hide().after(div_date);
    $('form input.date').parent().find('label').hide();
*/


	// Ajout d'une balise div pour les fenêtres de dialog


	// Création des éctouerus sur le clic des séances
	create_ecouteur_seances();
	// Suppression des boutons de suppression et d'édition des séances
	$('.cours a').remove();
	/*
    $('body > *').bind('click', function() {
	// Supprime toute fenêtre contextuelle éventuelle
	$('#dialog > *').remove();
	$('#dialog').dialog("destroy");
    });*/

	// Annule la redirection du lien de création d'un cours
	$('a.icon_new').bind('click', function() {
		if(!mode_saisie) {
			// Changement de look du curseur sur la page
			$('body').css("cursor", "not-allowed");

			// Ecouteur sur la page (- le planning) pour annuler la création si clic
			$('body').bind('click', function() {
				if(!mode_saisie) {
					// Changement de look du curseur sur la page
					$('body').css("cursor", "auto");

					// Changement de look du curseur sur le div planning
					$('.planning .planning-jour .heure,.planning .planning-jour .demi-heure').css("cursor", " auto");

					// Annule l'écouteur sur la page
					$('.planning .planning-jour .demi-heure, .planning .planning-jour .heure').unbind();
				}
		

			});

			// Changement de look du curseur sur les heures du div planning
			$('.planning .planning-jour .heure,.planning .planning-jour .demi-heure').css("cursor", " crosshair");

			// Ecouteur sur le div planning pour créer un cours si clic
			$('.planning .planning-jour .demi-heure,.planning .planning-jour .heure').bind('mousedown', function() {
				if(!mode_saisie) {
					var that = $(this);

					// Calcul du numéro de l'élément (sur 24 demi-heures)
					var num_demi_heure_debut = 24 - that.nextAll().size();

					var nouvelle_seance = $('<div class="cours"></div>')
					.height(that.height() - 4)
					.width(that.parent().width() - 6)
					.css({
						position: "absolute",
						top: that.position().top + 2
					})
					.appendTo(that.parents("div[name=relative]"));
					/*.resizable({containment: that.parent(),
			    minHeight: that.height(),
			    handles: "s,n",
			    grid: 18});*/

					var position_depart = nouvelle_seance.position().top;

					$('.planning .planning-jour .demi-heure,.planning .planning-jour .heure').add(nouvelle_seance).bind('mousemove', function(event) {
						if(!mode_saisie) {
							// Récupère la position de la souris
							var y = event.pageY - $(this).parent().offset().top;

							if(y > position_depart + 18) {
								var taille = Math.floor(Math.round( (y - nouvelle_seance.position().top) / 18));
								taille = (taille * 18) - 5;

								nouvelle_seance.height(taille);
							}
							else {
								if(y < position_depart) {
									var fin_seance = nouvelle_seance.position().top + nouvelle_seance.height();

									var debut_seance = Math.floor(Math.round( y  / 18)) * 18;

									nouvelle_seance.css({
										top: debut_seance + 2
									});
									nouvelle_seance.height(fin_seance - debut_seance - 2);
								}
							}
						}
					});


					// Ecouteur sur le div planning pour créer un cours si clic
					$('.planning .planning-jour .demi-heure,.planning .planning-jour .heure').add(nouvelle_seance).bind('mouseup', function() {
						if(!mode_saisie) {

							// Changement de look du curseur sur la page
							$('body').css("cursor", "auto");

							// Changement de look du curseur sur le div planning
							$('.planning .planning-jour .heure,.planning .planning-jour .demi-heure').css("cursor", " auto");

							$('.planning .planning-jour .demi-heure,.planning .planning-jour .heure').unbind();
							$('.planning .planning-jour .demi-heure,.planning .planning-jour .heure').unbind();
							$(".cours").unbind('mousemove');
							$(".cours").unbind('mouseup');

							create_dialog_creation(nouvelle_seance);
						// create_ecouteur_seances();
						}
		       
					});
				}
	       
			});
		}

		return false;
	});

    

})

function create_ecouteur_seances() {
	// Enlève tous les écouteurs pour éviter de les doubler sur les séances
	$('.cours').unbind('click');
	$('.cours').unbind('mousedown');
	$('.cours').unbind('mouseup');


	$('.cours').draggable({
		grid: [136, 18],
		containment: '.planning',
		start: function(event, ui) {
			var that = $(this);
            
			$(".cours[name=" + that.attr("name") + "]")
			.not(that)
			.css('opacity', .1);

			// Modifie l'aspect du curseur
			$('.planning, .planning >*, .cours, .cours >*').css("cursor", "move");
		},

		drag: function(event, ui) {

			var that = $(this);

            

			/*var numero_jour = that.parents('.planni;ng-jour').attr("name");
	     var decalage_jour = Math.floor(that.position().left/136);  // de 1 à 6
	     nouveau_jour = parseInt(numero_jour) + parseInt(decalage_jour);
	     $('a').text($(this).css('left'));
	     $('.planning-jour[name='+ nouveau_jour +']').find("div[name=relative]").append(that);*/
	

			//$('.planning-jour:eq(' + numero_jour + ') div[name=relative]').append(that);
			/*if(numero_jour == -1)
		that.parents('.planning-jour').prev('.planning-jour').append(that);
	    else if(numero == 1)
		that.parents('.planning-jour').next('.planning-jour').append(that);*/


			var horaires = calcul_heure(that.position().top)+'-'+calcul_heure(that.position().top + that.height());
			horaires = horaires.replace(new RegExp(':', 'g'), 'h');
			that.children('.container').children('.horaire').text(horaires);

		},
		stop: function() {
			var that = $(this);

			// Modifie le curseur sur le planning
			$('.planning, .planning >*').css("cursor", "auto");

			// Modifie le curseur sur les séances
			$('.cours, .cours >*').css("cursor", "pointer");


			var largeur_case = 136;

			// On calcule le décalage de jour
			var decalage_jour = Math.floor(that.position().left/largeur_case);
			// On récupère le numéro du nouveau jour
			var nouveau_jour = 5 + parseInt(decalage_jour);

			$(".cours[name=" + that.attr("name") + "]")
			.css('opacity', that.css('opacity'));

			// On replace les seances mutualisées
			$(".cours[name=" + that.attr("name") + "]").not(that).each(function() {				
				$(this).animate({
					left: $(this).position().left + 136*(decalage_jour - Math.floor($(this).position().left/largeur_case)) ,
					top: that.position().top
				}, 'fast');
			});



			// on récupère la date
			date = $('.planning-jour[name='+ nouveau_jour +']').find(".planning-titre").attr("name");
	    
			that.find('span[name=jour]').text(date);
			$.post(
				link('saisiedescours', 'index', 'countSeancesFilles', [that.attr("name")]),
				function(data) {
					if($(data).find('seances_filles').text() > 0) {
			
						$('<div id="dialog"></div>').appendTo('.planning');

						var formulaire = $(
							'<label for="recursivite-move">Récursivité : </label>'+
							'<select name="recursivite-move">'+
							'<option value="1">Mettre à jour la séance courante uniquement</option>'+
							'<option value="2">Mettre à jour toutes les séances filles</option>'+
							'<option value="3">Mettre à jour les séances filles identiques</option>'+
							'<option value="4">Réinitialiser les séances filles</option>'+
							'</select><br/>');

						$("#dialog").dialog({
							title: "Informations sur la séance",
							height: 180,
							width: 300,
							maxHeight: 180,
							maxWidth: 300,
							minHeight: 180,
							minWidth: 300,
							modal: true,
							buttons: {
								'Modifier': function() {
									// Charge les données de la séance
									$.post(
										link('saisiedescours', 'index', 'loadSeance', [that.attr("name")]),
										function(xml) {
											var salle = $(xml).find('seance').find('salle').text();
											var enseignant = $(xml).find('seance').find('enseignant').text();
											var groupe = $(xml).find('seance').find('groupe').text();
											var ue = $(xml).find('seance').find('ue').text();
											var type_enseignement = $(xml).find('seance').find('type_enseignement').text();

											if(salle == '')
												salle = 0;


											if(enseignant == '')
												enseignant = 0;

											if(groupe == '')
												groupe = 0;

											// Modification
											var h_deb = calcul_heure(that.position().top);
											var h_fin = calcul_heure(that.position().top + that.height());

											// Chargement des promotions de la séance
											$.post(
												link('saisiedescours', 'index', 'loadPromotionsFromSeance', [that.attr("name")]),
												function(data) {
													var promotions = "";
													$(data).find('promotion').each( function() {
														promotions += $(this).find('id').text() + "-";
													});

													promotions = promotions.substr(0, promotions.length - 1);

													$('#dialog').dialog('close');

													// Variable get
													var get = new Array(that.attr("name"),
														promotions,
														ue,
														type_enseignement);

													var post = {
														'enseignant': enseignant,
														'groupe[]':  groupe,
														'date': that.find("span[name=jour]").text().replace(new RegExp('-', 'g'), '/'),
														'heure-debut': h_deb,
														'heure-fin': h_fin,
														salle: salle,
														'recursivite': $('#dialog select[name=recursivite-move]').val(),
														'date-de-fin-de-recursivite': '',
														'submit_': "Modifier le cours"
													};


													// Modification de la séance
													$.post(
														link('saisiedescours', 'index', 'edit', get),
														post,
														function() {
															$('#dialog').dialog('close');
														}
														);
												}
												);

										}
										);

                                        

								}
							},
							close: function(event, ui) {
								$('#dialog').remove();
							}
						}).append(formulaire);
           

					}
					else {
						// Charge les données de la séance
						$.post(
							link('saisiedescours', 'index', 'loadSeance', [that.attr("name")]),
							function(xml) {
								var salle = $(xml).find('seance').find('salle').text();
								var enseignant = $(xml).find('seance').find('enseignant').text();
								var groupe = $(xml).find('seance').find('groupe').text();
								var ue = $(xml).find('seance').find('ue').text();
								var type_enseignement = $(xml).find('seance').find('type_enseignement').text();

								if(salle == '')
									salle = 0;

								if(enseignant == '')
									enseignant = 0;

								if(groupe == '')
									groupe = 0;

								// Modification
								var h_deb = calcul_heure(that.position().top);
								var h_fin = calcul_heure(that.position().top + that.height());

								// Chargement des promotions de la séance
								$.post(
									link('saisiedescours', 'index', 'loadPromotionsFromSeance', [that.attr("name")]),
									function(data) {
										var promotions = "";
										$(data).find('promotion').each( function() {
											promotions = promotions + $(this).find('id').text() + "-";
										});

										promotions = promotions.substr(0, promotions.length - 1);

										$('#dialog').dialog('close');

										// Variable get
										var get = new Array(that.attr("name"),
											promotions,
											ue,
											type_enseignement);


										var post = {
											'enseignant': enseignant,
											'groupe[]':  groupe,
											'date': that.find("span[name=jour]").text().replace(new RegExp('-', 'g'), '/'),
											'heure-debut': h_deb,
											'heure-fin': h_fin,
											salle: salle,
											'recursivite': "1",
											'date-de-fin-de-recursivite': '',
											'submit_': "Modifier le cours"
										};


										// Modification de la séance
										$.post(
											link('saisiedescours', 'index', 'edit', get),
											post,
											function() {
												$('#dialog').dialog('close');
											}
											);
									}
									);

							}
							);
					}
		    
				}
				);
		}

	});




	//Ajout d'un écouteur au clic sur les séances (pour la modif)
	$('.cours').bind('click', function() {
		if(!mode_saisie) {
			mode_saisie = true;
			var that = $(this);
			moved = false;

			$('<div id="dialog"></div>').appendTo('.planning');

			$('.planning .planning-jour .demi-heure,.planning .planning-jour .heure').add($(this)).unbind('mousemove');

			$('.cours >*').css("cursor", "pointer");
			$('.planning .planning-jour .demi-heure,.planning .planning-jour .heure').css("cursor", "auto");

			create_dialog_edit(that);
		//create_ecouteur_seances();
		}
	});

}

// Fonction de création d'une fenêtre de dialogue pour la modification/suppression
function create_dialog_edit(seance) {

	$('<div id="dialog"></div>').appendTo('.planning');

	mode_saisie = true;

	$.post(
		link('saisiedescours', 'index', 'loadSeance', [seance.attr("name")]),
		function(xml) {
			var jour = $(xml).find('seance').find('jour').text();
			var salle = $(xml).find('seance').find('salle').text();
			var enseignant = $(xml).find('seance').find('enseignant').text();
			var groupe = $(xml).find('seance').find('groupe').text();
			var ue = $(xml).find('seance').find('ue').text();
			var type_enseignement = $(xml).find('seance').find('type_enseignement').text();
			var h_deb = $(xml).find('seance').find('heure_debut').text();
			var h_fin = $(xml).find('seance').find('heure_fin').text();


			var formulaire = $(
				'<div id="tabs">' +
				'<ul>' +
				'<li><a href="#tabs-1">Modification</a></li>' +
				'<li><a href="#tabs-2">Suppression</a></li>'+
				'</ul>' +
				'<div id="tabs-1">'+
				'<label for="promotions">Promotions : </label><select name="promotions" class="multiple" multiple="true"></select><br/>'+
				'<label for="date">Date : </label>'+
				'<input type="text" class="date" name="date" value="'+
				seance.find("span[name=jour]").text().replace(new RegExp("-", "g"), "/")+'" style="width: 80px"/><br/>'+
				'<label for="ue">UE : </label><select name="ue"></select><br/>'+
				'<label for="type-de-seance">Type de séance : </label><select name="type-de-seance"></select><br/>'+
				'<label for="enseignant">Enseignant : </label><select name="enseignant"></select><br/>'+
				'<label for="salle">Salle : </label><select name="salle"></select><br/>'+
				'<label for="groupe">Groupe : </label><select name="groupe"></select><br/>'+
				'<label for="heure-debut">Heure début : </label>'+
				'<input type="text" name="heure-debut" value="'+h_deb+'" style="width: 50px"/><br/>'+
				'<label for="heure-fin">Heure fin : </label>'+
				'<input type="text" name="heure-fin" value="'+h_fin+'" style="width: 50px"/><br/>'+
				'<label for="recursivite-edit">Récursivité : </label>'+
				'<select name="recursivite-edit">'+
				'<option value="1">Mettre à jour la séance courante uniquement</option>'+
				'<option value="2">Mettre à jour toutes les séances filles</option>'+
				'<option value="3">Mettre à jour les séances filles identiques</option>'+
				'<option value="4">Réinitialiser les séances filles</option>'+
				'</select><br/>'+
				'<label for="date-fin-de-recursivite">Date fin de récursivité : </label>' +
				'<input type="text" class="date" name="date-fin-de-recursivite" style="width: 80px"/>'+
				'</div>'+
				'<div id="tabs-2">' +
				'<label for="recursivite">Récursivité : </label>'+
				'<select name="recursivite">'+
				'<option value="1">Supprimer la séance courante uniquement</option>'+
				'<option value="2">Supprimer les séances filles identiques</option>'+
				'<option value="3">Supprimer toutes les séances filles</option>'+
				'</select><br/>'+
				'<label name="pas-de-fille">Aucune séance fille </label><br/>'+
				'</div>' +
				'</div>');


			$("#dialog").dialog({
				title: "Informations sur la séance",
				height: 490,
				width: 580,
				maxHeight: 520,
				maxWidth: 600,
				minHeight: 490,
				minWidth: 580,
				modal: true,
				buttons: {
					'Annuler': function() {
						$(this).dialog('close');
					},
					'Appliquer': function() {
						// Modification
						if($("#tabs").tabs('option', 'selected') == 0) {
                               
							if(!empty($("#dialog select[name=ue]").val()))
								var ue = $("#dialog select[name=ue]").val();
							else {
								$("#dialog label[for=ue]").css("text-decoration", "underline");
								return false;
							}

							if(!empty($("#dialog select[name=type-de-seance]").val() ))
								var type_enseignement = $("#dialog select[name=type-de-seance]").val();
							else {
								$("#dialog label[for=type-de-seance]").css("text-decoration", "underline");
								return false;
							}

							// Test les horaires (intégrité et infériorité)
							if(!isHour($("#dialog input[name=heure-debut]").val()))
								return false;

							if(!isHour($("#dialog input[name=heure-fin]").val()))
								return false;

							// Vérification des horaires
							if(!verification_horaires())
								return false;


							// Test sur l'intégrité de la date
							if(!isDate($("#dialog input[name=date]").val()))
								return false;

							// Récupération des promotions
							var promotions = ($("#dialog select[name=promotions]").val() + "").replace(new RegExp(',', 'g'), '-');

							var get = new Array(seance.attr("name"),
								promotions,
								ue,
								type_enseignement);
			
							var post = {
								enseignant: $("#dialog select[name=enseignant]").val(),
								'groupe[]':  $("#dialog select[name=groupe]").val(),
								'date': $("#dialog input[name=date]").val(),
								'heure-debut': $("#dialog input[name=heure-debut]").val(),
								'heure-fin': $("#dialog input[name=heure-fin]").val(),
								salle: $("#dialog select[name=salle]").val(),
								'recursivite': $('#dialog select[name=recursivite-edit]').val(),
								'date-de-fin-de-recursivite': $("#dialog input[name=date-fin-de-recursivite]").val(),
								'submit_': "Modifier le cours"
							};

							// Modification de la séance
							$.post(
								link('saisiedescours', 'index', 'edit', get),
								post,
								function(data) {
									window.location = link('saisiedescours', 'index', null, [caste_promotions(), "semaine", $("form input.date").val().replace(new RegExp("/", "g"), "-")], ".html");
								}
								);

						}
						else { // Suppression

							// Paramètres get
							var get = new Array(seance.attr("name"));

							// Paramètres post
							var post = {
								'submit_': "Supprimer le cours",
								'recursivite': $('#dialog select[name=recursivite]').val()
							};

							// Suppression de la séance
							$.post(
								link('saisiedescours', 'index', 'delete', get),
								post,
								function(data) {
									window.location = link('saisiedescours', 'index', null, [caste_promotions(), "semaine", $("form input.date").val().replace(new RegExp("/", "g"), "-")], ".html");
								}
								);

						}

					// Rechargement de la page
					}
				},
				close: function(event, ui) {
					$("#dialog select[name=ue]").unbind('change');
					$("#dialog select[name=type-de-seance]").unbind('change');
					mode_saisie = false;
					$('#tabs > *').remove();
					$('#tabs').remove();
					$('#dialog').remove();

				}
			}).append(formulaire);

			// Ajout des onglets
			$('#dialog #tabs').tabs();

			// Ajout des calendriers
			$('#dialog input.date').datepicker();

			// Ajout de la multiselect pour les promotions
			$('#dialog select.multiple').multicheck();

			// Ecouteur sur l'heure de début
			$("#dialog input[name=heure-debut]").bind('change', function() {

				if(!isHour($("#dialog input[name=heure-debut]").val())) {
					$("#dialog input[name=heure-debut]").css("border-color", "red");
					return false;
				}
				else
					$("#dialog input[name=heure-debut]").css("border-color", $("#dialog select[name=enseignant]").css("border-color"));

				if(!verification_horaires())
					$("#dialog input[name=heure-debut]").css("border-color", "red");
				else
					$("#dialog input[name=heure-debut]").css("border-color", $("#dialog select[name=enseignant]").css("border-color"));

			});

			// Ecouteur sur le changement de valeur de l'heure de fin
			$("#dialog input[name=heure-fin]").bind('change', function() {

				if(!isHour($("#dialog input[name=heure-fin]").val())) {
					$("#dialog input[name=heure-fin]").css("border-color", "red");
					return false;
				}
				else
					$("#dialog input[name=heure-fin]").css("border-color", $("#dialog select[name=enseignant]").css("border-color"));


				if(!verification_horaires())
					$("#dialog input[name=heure-fin]").css("border-color", "red");
				else
					$("#dialog input[name=heure-fin]").css("border-color", $("#dialog select[name=enseignant]").css("border-color"));

			});

			// Ecouteur sur la date
			$("#dialog input[name=date]").bind('change', function() {

				if(!isDate($("#dialog input[name=date]").val())) {
					$("#dialog input[name=date]").css("border-color", "red");
					return false;
				}
				else
					$("#dialog input[name=date]").css("border-color", $("#dialog select[name=enseignant]").css("border-color"));
			});

			// On cache le label indiquant qu'il n'y a pas de fille
			$('#dialog label[name=pas-de-fille]').hide();

			// Compte les séances filles
			$.post(
				link('saisiedescours', 'index', 'countSeancesFilles', [seance.attr("name")]),
				function(data) {
					if($(data).find('seances_filles').text() == 0) {
						$('#dialog label[for=recursivite-edit]').hide();
						$('#dialog select[name=recursivite-edit]').hide();
						$('#dialog label[for=date-fin-de-recursivite]').hide();
						$('#dialog input[name=date-fin-de-recursivite]').hide();
						$('#dialog label[for=recursivite]').hide();
						$('#dialog select[name=recursivite]').hide();
						$('#dialog label[name=pas-de-fille]').show();
					}
				}
				);

			// Ecouteur sur les horaires pour recharger les salles occupées
			$("#dialog input[name=heure-debut], #dialog input[name=heure-fin],"+
				"#dialog select[name=recursivite-edit], #dialog input[name=date-fin-de-recursivite], "+
				"#dialog input[name=date]").bind('change', function() {
                
				load_salles_edit($('#dialog select[name=salle]').val(), seance, jour, h_deb, h_fin);
			});

			// Chargement des promotions de l'user correspondant à la date
			$.post(
				link('saisiedescours', 'index', 'loadPromotions', [$("#dialog input[name=date]").val().replace(new RegExp('/', 'g'), '-')]),
				function(data){
					// Ajout des promotions à la multibox
					$(data).find("promotion").each( function() {
						$("#dialog select[name=promotions]").
						append('<option value="' + $(this).find("id").text() + '">' + $(this).find("intitule").text() + '</option>');
					});
                    
					// Chargement des promotions de la séance
					$.post(
						link('saisiedescours', 'index', 'loadPromotionsFromSeance', [seance.attr("name")]),
						function(data) {
							var promotions = '';
							// Sélection des promotions dans la multibox
							$(data).find("promotion").each( function() {
								$('#dialog select[name=promotions]').
								find('option[value=' + $(this).find("id").text() + ']').
								attr("selected", true);
								promotions += $(this).find("id").text() + "-";

							});

							// On coupe le dernier "-"
							promotions = promotions.substr(0, promotions.length - 1);

							// Chargement des UEs des promotions
							$.post(
								link('saisiedescours', 'index', 'loadUesFromPromotions', new Array(promotions)),
								function(data){
									$(data).find("ue").each( function() {
										$("#dialog select[name=ue]").
										append('<option value="' + $(this).attr("id") + '">' + $(this).find("intitule").text() + '</option>');
									});

									// Sélection de l'ue
									$("#dialog select[name=ue]").val(ue);

									// Pré chargement des types d'enseignement
									load_types_enseignement_edit(type_enseignement, groupe);

									// Préchargement des enseignants
									load_enseignants_edit(enseignant);

									// Chargement des salles
									load_salles_edit(salle, seance, jour, h_deb, h_fin);

									// Ecouteur sur le changement de l'ue
									$("#dialog select[name=ue]").bind('change', function() {
										load_types_enseignement();

										// Chargement des enseignants en fonction de l'ue
										load_enseignants();

										load_groupes();

									}); // Fin BIND change select ue

									// Ecouteur sur le changement de type de séance
									$("#dialog select[name=type-de-seance]").bind('change', function() {
										load_groupes();
									}); // Fin BIND change select type de séance

								}
								);

							// Création d'un écouteur sur le changement de promotion(s)
							$("#dialog select[name=promotions]").bind('change', function() {
								// Récupération des promotions et caste sous forme URL
								promotions = ($("#dialog select[name=promotions]").val() + "").replace(new RegExp(',', 'g'), '-');

								// On vide les ues
								$('#dialog select[name=ue] >*').remove();

								// Chargement des UEs de la promotion
								$.post(
									link('saisiedescours', 'index', 'loadUesFromPromotions', new Array(promotions)),
									function(data){
										$(data).find("ue").each( function() {
											$("#dialog select[name=ue]").
											append('<option value="' + $(this).attr("id") + '">' + $(this).find("intitule").text() + '</option>');
										});

										// Sélection de l'ue
										$("#dialog select[name=ue]").val(ue);

										// Pré chargement des types d'enseignement
										load_types_enseignement_edit(type_enseignement, groupe);

										// Préchargement des enseignants
										load_enseignants_edit(enseignant);
                                        
										// Chargement des salles
										load_salles_edit(salle, seance, jour, h_deb, h_fin);

										// Ecouteur sur le changement de l'ue
										$("#dialog select[name=ue]").bind('change', function() {
											// Mise à jour de la variable ue
											ue = $("#dialog select[name=ue]").val();

											// Recharge les types d'enseignement
											load_types_enseignement();

											// Chargement des enseignants en fonction de l'ue
											load_enseignants();

											// Chargement des groupes en fonction de l'ue et du type d'enseignement
											load_groupes();

										}); // Fin BIND change select ue

										// Ecouteur sur le changement de type de séance
										$("#dialog select[name=type-de-seance]").bind('change', function() {
											load_groupes();
										}); // Fin BIND change select type de séance

									}
									);
							}); // Fin BIND change promotions
						}
						); // Fin POST chargement des promotions de la séance
				}
				); // Fin POST chargement des promotions disponible à la date pour l'user
		}
		); // Fin POST chargement de la séance



}

// Fonction de création d'une fenêtre de dialogue pour la création
function caste_checkbox(checkbox) {
	if(checkbox.attr('checked'))
		return 'on';
	else
		return null;

}

// Fonction de création d'une fenêtre de dialogue pour la création
function create_dialog_creation(nouvelle_seance) {

	$('<div id="dialog"></div>').appendTo('.planning');

	mode_saisie = true;
	// Supprime toute fenêtre contextuelle éventuelle

	var h_deb = calcul_heure(nouvelle_seance.position().top);
	var h_fin = calcul_heure(nouvelle_seance.position().top + nouvelle_seance.height());

	var formulaire = $(
		'<label for="date">Date : </label><input type="text" class="date" name="date" value="'+
		nouvelle_seance.parents('.planning-jour').find(".planning-titre").attr("name").replace(new RegExp('-', 'g'), '/')+
		'"style="width: 80px"/><br/>'+
		'<label for="ue">UE : </label><select name="ue"></select><br/>'+
		'<label for="type-de-seance">Type de séance : </label><select name="type-de-seance"></select><br/>'+
		'<label for="enseignant">Enseignant : </label><select name="enseignant"></select><br/>'+
		'<label for="salle">Salle : </label><select name="salle"></select><br/>'+
		'<label for="groupe">Groupe : </label><select name="groupe"></select><br/>'+
		'<label for="heure-debut">Heure début : </label>'+
		'<input type="text" name="heure-debut" value="'+h_deb+'" style="width: 40px"/><br/>'+
		'<label for="heure-fin">Heure fin : </label>'+
		'<input type="text" name="heure-fin" value="'+h_fin+'" style="width: 40px"/><br/>'+
		'<label for="recursivite">Récursivité : </label><input type="checkbox" name="recursivite"/><br/>'+
		'<label for="date-fin-de-recursivite">Date fin de récursivité : </label>' +
		'<input type="text" class="date" name="date-fin-de-recursivite" style="width: 80px"/>');
	

	$("#dialog").dialog({
		title: "Informations sur la séance",
		height: 380,
		width: 440,
		maxHeight: 400,
		maxWidth: 500,
		minHeight: 380,
		minWidth: 440,
		modal: true,
		buttons: {
			'Annuler': function() {
				$(this).dialog('close');
				nouvelle_seance.remove();
				$('<div id="dialog"></div>').remove();
			},
			'Enregistrer': function() {

				if(!empty($("#dialog select[name=ue]").val()))
					var ue = $("#dialog select[name=ue]").val();
				else {
					$("#dialog input[name=ue]").css('border-color', 'red');
					return false;
				}

				if(!empty($("#dialog select[name=type-de-seance]").val() )) {
					var type_enseignement = $("#dialog select[name=type-de-seance]").val();
				}
				else {
					$("#dialog input[name=type-de-seance]").css('border-color', 'red');
					return false;
				}

				// Test les horaires (intégrité et infériorité)
				if(!isHour($("#dialog input[name=heure-debut]").val()))
					return false;

				if(!isHour($("#dialog input[name=heure-fin]").val()))
					return false;

				// Vérification des horaires
				if(!verification_horaires())
					return false;


				// Test sur l'intégrité de la date
				if(!isDate($("#dialog input[name=date]").val()))
					return false;
                    



				// Test sur l'intégrité de la date de fin de récursivité


				// Paramètres get
				var get = new Array( $("#dialog input[name=date]").val().replace(new RegExp('/', 'g'), '-'),
					caste_promotions(),
					ue,
					type_enseignement);

				var post = {
					enseignant: $("#dialog select[name=enseignant]").val(),
					// Groupes
					'groupe[]': $('#dialog select[name=groupe]').val(),
					'heure-debut': $("#dialog input[name=heure-debut]").val(),
					'heure-fin': $("#dialog input[name=heure-fin]").val(),
					salle: $("#dialog select[name=salle]").val(),
					'date-de-fin-de-recursivite': $("#dialog input[name=date-fin-de-recursivite]").val(),
					'submit_': "Ajouter le cours"
				};

				// Enregistrement de la séance
				$.post(
					link('saisiedescours', 'index', 'create', get),
					post,
					function(data) {
						window.location = link('saisiedescours', 'index', null, [caste_promotions(), "semaine", $("form input.date").val().replace(new RegExp("/", "g"), "-")], ".html");
					}
					);
		    
			}
		},
		close: function(event, ui) {
			$("#dialog select[name=ue]").unbind('change');
			$("#dialog select[name=type-de-seance]").unbind('change');
			mode_saisie = false;
			nouvelle_seance.remove();

			$('#dialog').remove();

		}
	}).append(formulaire);



	$('#dialog input.date').datepicker();

    
	$("#dialog input[name=date-fin-de-recursivite]").hide();
	$("#dialog label[for=date-fin-de-recursivite]").hide();

	$("#dialog input[name=recursivite]").bind('click', function() {

		if($(this).attr('checked')) {
			$("#dialog input[name=date-fin-de-recursivite]").show();
			$("#dialog label[for=date-fin-de-recursivite]").show();
		}
		else {
			$("#dialog input[name=date-fin-de-recursivite]").hide();
			$("#dialog label[for=date-fin-de-recursivite]").hide();
		}
	});

	// Ecouteur sur les horaires
	$("#dialog input[name=heure-debut]").bind('change', function() {

		if(!isHour($("#dialog input[name=heure-debut]").val())) {
			$("#dialog input[name=heure-debut]").css("border-color", "red");
			return false;
		}
		else
			$("#dialog input[name=heure-debut]").css("border-color", $("#dialog select[name=enseignant]").css("border-color"));

		if(!verification_horaires())
			$("#dialog input[name=heure-debut]").css("border-color", "red");
		else
			$("#dialog input[name=heure-debut]").css("border-color", $("#dialog select[name=enseignant]").css("border-color"));

	});

	$("#dialog input[name=heure-fin]").bind('change', function() {

		if(!isHour($("#dialog input[name=heure-fin]").val())) {
			$("#dialog input[name=heure-fin]").css("border-color", "red");
			return false;
		}
		else
			$("#dialog input[name=heure-fin]").css("border-color", $("#dialog select[name=enseignant]").css("border-color"));


		if(!verification_horaires())
			$("#dialog input[name=heure-fin]").css("border-color", "red");
		else
			$("#dialog input[name=heure-fin]").css("border-color", $("#dialog select[name=enseignant]").css("border-color"));

	});

	// Ecouteur sur la date
	$("#dialog input[name=date]").bind('change', function() {

		if(!isDate($("#dialog input[name=date]").val())) {
			$("#dialog input[name=date]").css("border-color", "red");
			return false;
		}
		else
			$("#dialog input[name=date]").css("border-color", $("#dialog select[name=enseignant]").css("border-color"));
	});
        

	var promotions = caste_promotions();

	// Ecouteur sur les horaires pour recharger les salles occupées
	$("#dialog input[name=heure-debut], #dialog input[name=heure-fin],"
		+ "#dialog input[name=date-fin-de-recursivite], #dialog input[name=recursivite]").bind('change', function() {
		load_salles($("#dialog select[name=salle]").val());
	});

	// Chargement des UEs de la promotion
	$.post(
		link('saisiedescours', 'index', 'loadUesFromPromotions', new Array(promotions)),
		function(data){
			num = 0;
			$(data).find("ue").each( function() {
				$("#dialog select[name=ue]").append('<option value="' + $(this).attr("id") + '">' + $(this).find("intitule").text() + '</option>');
			});

			// Pré chargement des types d'enseignement
			load_types_enseignement();
			// Préchargement des enseignants
			load_enseignants();
			// Chargement des salles
			load_salles(0);

			$("#dialog select[name=ue]").bind('change', function() {
				load_types_enseignement();

				// Chargement des enseignants en fonction de l'ue
				load_enseignants();

				load_groupes();

			}); // Fin bind change select ue

			$("#dialog select[name=type-de-seance]").bind('change', function() {

				load_groupes();

			}); // Fin bind change select ue

		}
		);

  

}

function verification_horaires() {
	var arHour = $("#dialog input[name=heure-debut]").val().split(':');
	var iHour = parseInt(arHour[0], 10);
	var iMinute = parseInt(arHour[1], 10);

	var date_D = new Date(0, 0, 0, iHour, iMinute, 0);

	arHour = $("#dialog input[name=heure-fin]").val().split(':');
	iHour = parseInt(arHour[0], 10);
	iMinute = parseInt(arHour[1], 10);

	var date_F = new Date(0, 0, 0, iHour, iMinute, 0);

	if(date_F < date_D)
		return false;
	else
		return true;
   
}

// Fonction qui permet de caster les promotions sous forme id-id-id
function caste_promotions() {
	var promotions = '';

	$('#_promotions option:selected').each(function() {
		promotions = $(this).val() + '-' + promotions
	});

	return promotions.substr(0, promotions.length - 1);
}


// Fonction permettant de charger les salles
function load_salles(id_salle) {
	// Suppression de toutes les options précédentes
	$("#dialog select[name=salle] >*").remove();

	// Chargement des Types d'enseignement en fonction de l'ue'
	$.post(
		link('saisiedescours', 'index', 'loadSalles', new Array()),
		function(data){
			$("#dialog select[name=salle]").append('<option value="0"></option>');
			$(data).find("salle").each( function() {
				$("#dialog select[name=salle]").append('<option value="' + $(this).attr("id") + '">' + $(this).find("intitule").text() + '</option>');
		 
			});

			// Sélectionne la salle passée en paramètre
			$("#dialog select[name=salle]").val(id_salle);
            
			// Mise en valeur des salles occupées
			var date = $("#dialog input[name=date]").val().replace(new RegExp('/', 'g'), '-');
			var h_deb = $("#dialog input[name=heure-debut]").val().replace(new RegExp(':', 'g'), '-');
			var h_fin = $("#dialog input[name=heure-fin]").val().replace(new RegExp(':', 'g'), '-');

			// Charge les salles occupées pendant les séances filles si récursivité est choisie
			if( ($('#dialog input[name=recursivite]').attr('checked')) && ($('#dialog input[name=date-fin-de-recursivite]')) ) {
				var recursivite = $("#dialog input[name=date-fin-de-recursivite]").val().replace(new RegExp('/', 'g'), '-');
				$.post(
					link('saisiedescours', 'index', 'loadSallesOccupeesRecursivite', new Array(date, h_deb, h_fin, recursivite)),
					function(data) {
						$(data).find("salle").each( function() {
							$("#dialog select[name=salle] option[value="+$(this).find("id").text()+"]").css("color", "orange");
							$("#dialog select[name=salle] option[value='"+$(this).find("id").text()+"']").text(
								$("#dialog select[name=salle] option[value='"+$(this).find("id").text()+"']").text() + " ¤");
						})
					}
					);

			}

			// Chargement des salles occupees par une autre séance au cours de la période
			$.post(
				link('saisiedescours', 'index', 'loadSallesOccupees', new Array(date, h_deb, h_fin)),
				function(data) {
					$(data).find("salle").each( function() {
						$("#dialog select[name=salle] option[value="+$(this).find("id").text()+"]").css("color", "red");
						$("#dialog select[name=salle] option[value='"+$(this).find("id").text()+"']").text(
							$("#dialog select[name=salle] option[value='"+$(this).find("id").text()+"']").text() + " ~");
					})
				}
				);

		}
		);

}

// Fonction permettant de charger les salles
function load_salles_edit(salle, seance, jour, h_deb, h_fin) {
	// Suppression de toutes les options précédentes
	$("#dialog select[name=salle] >*").remove();

	// Chargement des Types d'enseignement en fonction de l'ue'
	$.post(
		link('saisiedescours', 'index', 'loadSalles', new Array()),
		function(data){
			$("#dialog select[name=salle]").append('<option value="0"></option>');
			$(data).find("salle").each( function() {
				$("#dialog select[name=salle]").append('<option value="' + $(this).attr("id") + '">' + $(this).find("intitule").text() + '</option>');
			});

			// Compte le nombre de séances filles
			$.post(
				link('saisiedescours', 'index', 'countSeancesFilles', [seance.attr("name")]),
				function(data) {
					// Si supérieur à 0, on récupère les indisponibilités de salles des séances filles
					if( ($('#dialog select[name=recursivite-edit]').val() > 1) && ($(data).find('seances_filles').text() > 0) ) {
						var get = [seance.attr("name"), $('#dialog select[name=recursivite-edit]').val()];

						// Test si une heure de fin de récursivité est renseignée
						if($('#dialog input[name=date-fin-de-recursivite]').val() != '') {
							get[get.length] = $('#dialog input[name=date-fin-de-recursivite]').val().replace(new RegExp('/', 'g'), '-');
						}
						else {
							get[get.length] = null;
						}

						// test si la date a été modifiée
						if($('#dialog input[name=date]').val() != jour)
							get[get.length] = $('#dialog input[name=date]').val().replace(new RegExp('/', 'g'), '-');
						else
							get[get.length] = null;

						// Test si l'heure fin a été modifiée
						if($('#dialog input[name=heure-fin]').val() != h_fin) {
							get[get.length] = null;
							get[get.length] = $('#dialog input[name=heure-fin]').val().replace(new RegExp(':', 'g'), '-');
						}

						// Test si l'heure début a été modifiée
						if($('#dialog input[name=heure-debut]').val() != h_deb) {
							get[3] = $('#dialog input[name=heure-debut]').val().replace(new RegExp(':', 'g'), '-');
						}

						//alert(get);

						// Colorisation des salles occupées par les filles
						$.post(
							link('saisiedescours', 'index', 'loadSallesOccupeesSeancesFilles', get),
							function(data) {
								//alert(data);
								$(data).find("salle").each( function() {
									$("#dialog select[name=salle] option[value='"+$(this).find("id").text()+"']").css("color", "orange");
									$("#dialog select[name=salle] option[value='"+$(this).find("id").text()+"']").text(
										$("#dialog select[name=salle] option[value='"+$(this).find("id").text()+"']").text() + " ¤" );
								})
							}
							);

					}

					// Préparation des paramètres pour la requête ajax
					var date = $("#dialog input[name=date]").val().replace(new RegExp('/', 'g'), '-');
					var heure_deb = $("#dialog input[name=heure-debut]").val().replace(new RegExp(':', 'g'), '-');
					var heure_fin = $("#dialog input[name=heure-fin]").val().replace(new RegExp(':', 'g'), '-');

					// Chargement des salles occupees par une autre séance au cours de la période
					$.post(
						link('saisiedescours', 'index', 'loadSallesOccupees', new Array(date, heure_deb, heure_fin, [seance.attr("name")])),
						function(data) {
							$(data).find("salle").each( function() {
								$("#dialog select[name=salle] option[value='"+$(this).find("id").text()+"']").css("color", "red");
								$("#dialog select[name=salle] option[value='"+$(this).find("id").text()+"']").text(
									$("#dialog select[name=salle] option[value='"+$(this).find("id").text()+"']").text() + " ~");
							});
						}
						);

				}
				);



			// Sélection de la salle passée en paramètre
			$("#dialog select[name=salle]").val(salle);


		}
		);

}

// Fonction permettant de charger les types d'enseignement en fonction de l'ue
function load_types_enseignement() {

	// Suppression de toutes les options précédentes
	$("#dialog select[name=type-de-seance] >*").remove();

	// Chargement des Types d'enseignement en fonction de l'ue'
	$.post(
		link('saisiedescours', 'index', 'loadTypeEnseignementFromUe', new Array($("#dialog select[name=ue]").val())),
		function(data){

			$(data).find("type_enseignement").each( function() {

				$("#dialog select[name=type-de-seance]").append('<option value="' + $(this).attr("id") + '">' + $(this).find("intitule").text() + '</option>');
			});
			// Chargement des groupes
			load_groupes();

		} // Fin fonction callback post type enseignement from ue
		); // Fin post type enseignement from ue

}

// Fonction permettant de charger les types d'enseignement en fonction de l'ue
function load_types_enseignement_edit(type_enseignement, groupe) {

	// Suppression de toutes les options précédentes
	$("#dialog select[name=type-de-seance] >*").remove();
    
	// Chargement des Types d'enseignement en fonction de l'ue'
	$.post(
		link('saisiedescours', 'index', 'loadTypeEnseignementFromUe', new Array($("#dialog select[name=ue]").val())),
		function(data){
  
			$(data).find("type_enseignement").each( function() {
		
				$("#dialog select[name=type-de-seance]").append('<option value="' + $(this).attr("id") + '">' + $(this).find("intitule").text() + '</option>');
			});

			$("#dialog select[name=type-de-seance]").val(type_enseignement);
			load_groupes_edit(groupe);

		} // Fin fonction callback post type enseignement from ue
		); // Fin post type enseignement from ue
    
}

// Fonction permettant de charger les types d'enseignement en fonction de l'ue
function load_enseignants() {

	// Suppression de toutes les options précédentes
	$("#dialog select[name=enseignant] >*").remove();

	// Chargement des Types d'enseignement en fonction de l'ue'
	$.post(
		link('saisiedescours', 'index', 'loadEnseignantFromUe', new Array($("#dialog select[name=ue]").val())),
		function(data){
			$("#dialog select[name=enseignant]").append('<option value="0"></option>');
			$(data).find("enseignant").each( function() {

				$("#dialog select[name=enseignant]").append('<option value="' + $(this).attr("id") + '">' + $(this).find("intitule").text() + '</option>');
			});

		} // Fin fonction callback post type enseignement from ue
		); // Fin post type enseignement from ue

}

// Fonction permettant de charger les types d'enseignement en fonction de l'ue
function load_groupes() {

	// Suppression de toutes les options précédentes
	$("#dialog select[name=groupe] >*").remove();

	// Chargement des Types d'enseignement en fonction de l'ue'
	$.post(
		link('saisiedescours', 'index', 'loadGroupes', new Array(caste_promotions(), $("#dialog select[name=ue]").val(), $("#dialog select[name=type-de-seance]").val())),
		function(data){
			if($(data).find("groupe").size() == 0) {
				$("#dialog select[name=groupe]").hide();
				$("#dialog label[for=groupe]").hide();
			}
			else {
				$("#dialog select[name=groupe]").show();
				$("#dialog label[for=groupe]").show();
				$("#dialog select[name=groupe]").append('<option value="0"></option>');
			}
			$(data).find("groupe").each( function() {

				$("#dialog select[name=groupe]").append('<option value="' + $(this).attr("id") + '">' + $(this).find("intitule").text() + '</option>');
			});

		} // Fin fonction callback post type enseignement from ue
		); // Fin post type enseignement from ue

}

// Fonction permettant de charger les types d'enseignement en fonction de l'ue
function load_groupes_edit(groupe) {

	// Suppression de toutes les options précédentes
	$("#dialog select[name=groupe] >*").remove();

	// Chargement des Types d'enseignement en fonction de l'ue'
	$.post(
		link('saisiedescours', 'index', 'loadGroupes', new Array(caste_promotions(), $("#dialog select[name=ue]").val(), $("#dialog select[name=type-de-seance]").val())),
		function(data){
			if($(data).find("groupe").size() == 0) {
				$("#dialog select[name=groupe]").hide();
				$("#dialog label[for=groupe]").hide();
			}
			else {
				$("#dialog select[name=groupe]").show();
				$("#dialog label[for=groupe]").show();
				$("#dialog select[name=groupe]").append('<option value="0"></option>');
			}
			$(data).find("groupe").each( function() {

				$("#dialog select[name=groupe]").append('<option value="' + $(this).attr("id") + '">' + $(this).find("intitule").text() + '</option>');
			});
			$("#dialog select[name=groupe]").val(groupe);

		} // Fin fonction callback post type enseignement from ue
		); // Fin post type enseignement from ue

}

function load_enseignants_edit(enseignant) {

	// Suppression de toutes les options précédentes
	$("#dialog select[name=enseignant] >*").remove();

	// Chargement des Types d'enseignement en fonction de l'ue'
	$.post(
		link('saisiedescours', 'index', 'loadEnseignantFromUe', new Array($("#dialog select[name=ue]").val())),
		function(data){
			$("#dialog select[name=enseignant]").append('<option value="0"></option>');
			$(data).find("enseignant").each( function() {

				$("#dialog select[name=enseignant]").append('<option value="' + $(this).attr("id") + '">' + $(this).find("intitule").text() + '</option>');
			});
			$("#dialog select[name=enseignant]").val(enseignant);
	     

		} // Fin fonction callback post type enseignement from ue
		); // Fin post type enseignement from ue

}

// Fonction permettant de calculer une heure en fonction d'une position
function calcul_heure(ordonnee) {

	var heure = 8;
	var demi_heure = "00";

	var nombre_demi_heure = Math.round(ordonnee / 18);

	if(nombre_demi_heure%2 == 1) {
		heure += Math.floor(nombre_demi_heure/2);
		demi_heure = "30";
	}
	else
		heure += Math.ceil(nombre_demi_heure/2);
	
	if(heure < 10)
		heure = "0" + heure;

	return heure + ':' + demi_heure;
}
    
function isHour(sHour){

	var sSeparator = ':';
	var withSeconds = false;

	if(sHour.match("^[0-9]{2}:[0-9]{2}:[0-9]{2}$")) withSeconds = true;
	else if(!sHour.match("^[0-9]{2}:[0-9]{2}$")) return false;

	var arHour = sHour.split(sSeparator);
	var iHour = parseInt(arHour[0], 10);
	var iMinute = parseInt(arHour[1], 10);

	if(withSeconds)	var iSecs = parseInt(arHour[2], 10);
	else var iSecs = 0;
	return 	(iHour >= 8 && iHour < 21) && (iMinute >= 0 && iMinute < 60) && (iSecs >= 0 && iSecs < 60);

}

function isDate(sDate){

	var sSeparator = '/';

	if(!sDate.match("^[0-9]{2}/[0-9]{2}/[0-9]{4}$")) return false;

	var arDate = sDate.split(sSeparator);
	var iJour = parseInt(arDate[0], 10);
	var iMois = parseInt(arDate[1], 10);
	var iAnnee = parseInt(arDate[2], 10);

	return 	(iJour >= 0 && iJour < 32) && (iMois >= 0 && iMois < 13) && (iAnnee >= 0);

}